package com.nhjf.mobile.bus.exception;


/**
 * 异常管理器
 * @author yuxx
 *
 */
//@Component
public class ExceptionManager {
	
//	@Autowired
//	private HazelcastInstance hz;
	
//	private Logger logger = LoggerFactory.getLogger(ExceptionManager.class);
//	
//	private IMap<String, ExceptionHandler> handlerMap;
//	private IMap<String, ExceptionHandleConfig> configMap;
	
//	@PostConstruct
//	public void init() {
//		 handlerMap = hz.getMap("handlerMap");
//		 configMap = hz.getMap("configMap");
//	}
//	
//	/**
//	 * 为批量异常code添加异常处理配置
//	 * @param handler
//	 */
//	public void addExceptionHandleConfig(List<ExceptionHandleConfig> configs, String ... errorCodes) {
//		for(int i=0; i<errorCodes.length; i++) {
//			configMap.put(errorCodes[i], configs.get(i));
//		}		
//	}
//	
//	/**
//	 * 为异常code添加异常处理配置
//	 * @param handler
//	 */
//	public void addExceptionHandleConfig(ExceptionHandleConfig config, String errorCode) {
//		configMap.put(errorCode, config);
//	}
//	
//	/**
//	 * 为异常code添加异常处理类
//	 * @param handler
//	 */
//	public void addHandlers(List<ExceptionHandler> handlers, String ... errorCodes) {
//		for(int i=0; i<errorCodes.length; i++) {
//			handlerMap.put(errorCodes[i], handlers.get(i));
//		}		
//	}
//	
//	/**
//	 * 为异常code添加异常处理类
//	 * @param handler
//	 */
//	public void addHandler(ExceptionHandler handler, String errorCode) {
//		handlerMap.put(errorCode, handler);
//	}
//	
//	/**
//	 * 默认配置处理异常
//	 * @param exception
//	 * @throws Exception 
//	 */
//	public Future<ExceptionHandleResult> handleException(final CzshopException e) throws Exception {
//		logger.debug("处理异常" + e.getErrorCode() + "开始");
//		ExceptionHandler handler = handlerMap.get(e.getErrorCode());
//		
//		if (handler == null) {
//			logger.error("错误码" + e.getErrorCode() + "的处理器类不存在");
//			throw new Exception("错误码" + e.getErrorCode() + "的处理器类不存在");
//		} else {
//			Class<? extends ExceptionHandler> c = handler.getClass();
//			logger.debug("处理器类是" + c.getCanonicalName());
//			return handle(handler, e, configMap.get(e.getErrorCode()));
//		}
//	}
//
//	/**
//	 * 自定义配置处理异常
//	 * @param exception
//	 * @throws Exception 
//	 */
//	public Future<ExceptionHandleResult> handleException(final CzshopException e, ExceptionHandleConfig config) throws Exception {
//		logger.debug("处理异常" + e.getErrorCode() + "开始");
//		ExceptionHandler handler = handlerMap.get(e.getErrorCode());
//		
//		if (handler == null) {
//			logger.error("错误码的" + e.getErrorCode() + "处理器类不存在");
//			throw new Exception("错误码的" + e.getErrorCode() + "处理器类不存在");
//		} else {
//			Class<? extends ExceptionHandler> c = handler.getClass();
//			logger.debug("处理器类是" + c.getCanonicalName());
//			if (config != null) {
//				logger.debug("采用自定义配置");
//				return handle(handler, e, config);
//			} else {
//				logger.debug("自定义配置为空，采用默认配置");
//				return handle(handler, e, configMap.get(e.getErrorCode()));
//			}
//		}
//	}
//	
//	/**
//	 * 开始进入修复流程
//	 * @param handler
//	 * @param exception
//	 * @param exceptionHandleConfig
//	 * @return
//	 */
//	private Future<ExceptionHandleResult> handle(ExceptionHandler handler,
//			CzshopException e, ExceptionHandleConfig config) {
//		IExecutorService executorService = hz.getExecutorService(e.getErrorCode());
//
//		HandleTask task = new HandleTask();
//		task.setHandler(handler);
//		task.setConfig(config);
//		task.setE(e);
//		
//		return executorService.submit(task);
//	}
}
